entry completion: Stop using ::focus-out-event
authorMatthias Clasen <mclasen@redhat.com>
Sat, 6 Jan 2018 17:03:30 +0000 (12:03 -0500)
committerMatthias Clasen <mclasen@redhat.com>
Tue, 16 Jan 2018 19:14:10 +0000 (14:14 -0500)
We can just use ::event.

gtk/gtkentrycompletion.c

index 671a276cb8edf5b485819b8ece6b120276df540c..109053b68a7c01bef7ef367307d0e7252d837515 100644 (file)
@@ -2566,6 +2566,19 @@ completion_insert_text_callback (GtkEntry           *entry,
     }
 }
 
+static gboolean
+maybe_accept_completion (GtkEntry *entry,
+                         GdkEvent *event)
+{
+  gboolean focus_in;
+
+  if (gdk_event_get_event_type (event) == GDK_FOCUS_CHANGE &&
+      gdk_event_get_focus_in (event, &focus_in) && !focus_in)
+    accept_completion_callback (entry);
+
+  return GDK_EVENT_PROPAGATE;
+}
+
 static void
 connect_completion_signals (GtkEntryCompletion *completion)
 {
@@ -2582,8 +2595,8 @@ connect_completion_signals (GtkEntryCompletion *completion)
                       G_CALLBACK (clear_completion_callback), completion);
     g_signal_connect (completion->priv->entry, "activate",
                       G_CALLBACK (accept_completion_callback), completion);
-    g_signal_connect (completion->priv->entry, "focus-out-event",
-                      G_CALLBACK (accept_completion_callback), completion);
+    g_signal_connect (completion->priv->entry, "event",
+                      G_CALLBACK (maybe_accept_completion), completion);
 }
 
 static void
@@ -2643,6 +2656,8 @@ disconnect_completion_signals (GtkEntryCompletion *completion)
                                         G_CALLBACK (clear_completion_callback), completion);
   g_signal_handlers_disconnect_by_func (completion->priv->entry,
                                         G_CALLBACK (accept_completion_callback), completion);
+  g_signal_handlers_disconnect_by_func (completion->priv->entry,
+                                        G_CALLBACK (maybe_accept_completion), completion);
 }
 
 void